﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using IUAP.DAL.Intranet;
using IUAP.DAL;
/// <summary>
/// Descripción breve de Curso
/// </summary>
namespace IUAP.BLL.Intranet
{
    public class Curso:BaseIntranet
    {
        public Curso()
        {

        }

        public Curso(int _id_curso
            , int _id_escuela
            , string _nomb_curs
            , int _cred_curs
            , bool _tipo_curs
            , int _seme_curs
            , bool _actv_curs)
        {
            this.Id_curso = _id_curso;
            this.Id_escuela = _id_escuela;
            this.Nomb_curs = _nomb_curs;
            this.Cred_curs = _cred_curs;
            this.Tipo_curs = _tipo_curs;
            this.Seme_curs = _seme_curs;
            this.Actv_curs = _actv_curs;
        }

        int id_curso = 0;

        public int Id_curso
        {
            get { return id_curso; }
            set { id_curso = value; }
        }
        int id_escuela = 0;

        public int Id_escuela
        {
            get { return id_escuela; }
            set { id_escuela = value; }
        }
        string nomb_curs = "";

        public string Nomb_curs
        {
            get { return nomb_curs; }
            set { nomb_curs = value; }
        }
        int cred_curs = 0;

        public int Cred_curs
        {
            get { return cred_curs; }
            set { cred_curs = value; }
        }
        bool tipo_curs = true;

        public bool Tipo_curs
        {
            get { return tipo_curs; }
            set { tipo_curs = value; }
        }
        int seme_curs = 0;

        public int Seme_curs
        {
            get { return seme_curs; }
            set { seme_curs = value; }
        }
        bool actv_curs = true;

        public bool Actv_curs
        {
            get { return actv_curs; }
            set { actv_curs = value; }
        }
        public bool update()
        {
            return Curso.UpdateCurso(this.Id_curso,this.Id_escuela, this.Nomb_curs, this.Cred_curs, this.Tipo_curs, this.Seme_curs,this.Actv_curs);
        }
        public static int InsertCurso(int id_escuela, string nomb_curs, int cred_curs, bool tipo_curs,int seme_curs)
        {
            CursoDetalles record = new CursoDetalles(0, id_escuela, nomb_curs, cred_curs, tipo_curs,seme_curs,true);
            int ret = SiteProvider.Intranet.InsertCurso(record);
            BizObject.PurgeCacheItems("Intranet_Cursos");
            return ret;
        }
        public static bool UpdateCurso(int id_curso, int id_escuela, string nomb_curs, int cred_curs, bool tipo_curs, int seme_curs, bool actv_curso)
        {
            CursoDetalles record = new CursoDetalles(id_curso,id_escuela, nomb_curs, cred_curs, tipo_curs, seme_curs,actv_curso);
            bool ret = SiteProvider.Intranet.UpdateCurso(record);
            BizObject.PurgeCacheItems("Intranet_Curso");
            return ret;
        }
        public static bool UpdateEstadoCurso(int id_curso, bool actv_curso)
        {
            bool ret = SiteProvider.Intranet.UpdateEstadoCurso(id_curso, actv_curso);
            BizObject.PurgeCacheItems("Intranet_Curso");
            return ret;
        }
        public static int GetCountCursos(int id_escuela)
        {
            int cursoscount = 0;
            string key = "Intranet_CantidadCursos";
            if (BaseIntranet.Settings.EnableCaching && BizObject.Cache[key] != null)
            {
                cursoscount = (int)BizObject.Cache[key];
            }
            else
            {
                cursoscount = SiteProvider.Intranet.GetCountCursos(id_escuela);
                BaseIntranet.CacheData(key, cursoscount);
            }
            return cursoscount;
        }
        public static List<Curso> GetCursosbyEscuela(string parametro, int tipo_parametro,int id_escuela, int startRowIndex, int maximumRows)
        {
            List<Curso> Curso = null;
            string key = "Intranet_Curso_" + startRowIndex.ToString() + "_" + maximumRows.ToString();
            if (BaseIntranet.Settings.EnableCaching && BizObject.Cache[key] != null)
            {
                Curso = (List<Curso>)BizObject.Cache[key];
            }
            else
            {
                List<CursoDetalles> recordset = SiteProvider.Intranet.GetCursosbyEscuela(parametro,tipo_parametro,id_escuela,
                   GetPageIndex(startRowIndex, maximumRows), maximumRows);
                Curso = GetCursoListDeCursoDetallesList(recordset);
                BaseIntranet.CacheData(key, Curso);
            }
            return Curso;
        }
        public static List<Curso> GetCursosbyEscuela(int id_facultad,int startRowIndex, int maximumRows)
        {
            List<Curso> Curso = null;
            string key = "Intranet_Curso_" + startRowIndex.ToString() + "_" + maximumRows.ToString();
            if (BaseIntranet.Settings.EnableCaching && BizObject.Cache[key] != null)
            {
                Curso = (List<Curso>)BizObject.Cache[key];
            }
            else
            {
                List<CursoDetalles> recordset = SiteProvider.Intranet.GetCursosbyEscuela(id_facultad,
                   GetPageIndex(startRowIndex, maximumRows), maximumRows);
                Curso = GetCursoListDeCursoDetallesList(recordset);
                BaseIntranet.CacheData(key, Curso);
            }
            return Curso;
        }
        private static Curso GetCursoFromCursoDetalles(CursoDetalles record)
        {
            if (record == null)
                return null;
            else
            {
                return new Curso(record.Id_curso, record.Id_escuela, record.Nomb_curs,
                   record.Cred_curs, record.Tipo_curs, record.Seme_curs, record.Actv_curs);
            }
        }
        private static List<Curso> GetCursoListDeCursoDetallesList(List<CursoDetalles> recordset)
        {
            List<Curso> curso = new List<Curso>();
            foreach (CursoDetalles record in recordset)
            {
                curso.Add(GetCursoFromCursoDetalles(record));
            }
            return curso;
        }
    }
}